Computers have become highly integrated in the workforce, in the home, in mobile devices, and many other places. Computers can process massive amounts of information quickly and efficiently. Software applications designed to run on computer systems allow users to perform a wide variety of functions including business applications, schoolwork, entertainment and more. Software applications are often designed to perform specific tasks, such as word processor applications for drafting documents, or email programs for sending, receiving and organizing email.
In each case, the software applications interact with and use different hardware components of the hosting computer system. For instance, a software application may interact with a local data store such as a hard disk, DVD drive or flash drive. Typically, an application makes input/output (I/O) requests which are sent from the application to the operating system's file system. The file system accesses the necessary data from the disk, and returns it to the application. In cases where virtual applications are used, instead of retrieving the data solely from the local hard disk, at least a portion of the data is requested from a remote data store (usually a network file server). That data is then received at the computer system and stored on its local hard disk. The computer's file system then sends the data to the application as it normally would with locally stored data.